package class6;

import java.util.Random;

public class string {
    //1.同一个包下的程序可以直接访问，不需要进行导包
    //2.访问其他包下的程序需要导包
    //3.java.lang包下的程序可以直接访问，不需要导包
    //4.访问多个其他包下的程序，这些程序名一样的情况下，默认只能访问一个，如果要访问其他的需要使用全路径
    public static void testString()
    {
        //下面是一些常用的构造方法
        String name="今天是个上分的好日子！";
        System.out.println(name);

        String rs1=new String();
        System.out.println(rs1);

        String rs2=new String("today is a good day");
        System.out.println(rs2);

        char[] arr={'a','b','c'};
        String rs3=new String(arr);//利用数组可以创建字符串
        System.out.println(rs3);

        byte[] bytes={65,66,67};
        String rs4=new String(bytes);
        System.out.println(rs4);

        //下面是一些常用的string方法
        int size=name.length();//获取字符串的长度
        System.out.println("字符串的长度是："+size);

        //System.out.println(name[0]);//不能通过下标访问字符串中的字符
        System.out.println("第一个字符是："+name.charAt(0));//通过charAt方法获取指定位置的字符

        //字符串的遍历
        for(int i=0;i<name.length();i++)
        {
            System.out.print(name.charAt(i)+" ");
        }
        //或者转为字符数组
        char[] arr2=name.toCharArray();
        for(int i=0;i<arr2.length;i++)
        {
            System.out.print(arr2[i]+" ");
        }

        //字符串的比较
        String s1="abc";// Java 设计了字符串常量池来优化内存占用,储存在堆上的字符串常量池，地址相同
        String s2="abc";
        String s3=new String("abc");//new 出来的字符串对象，地址不同
        String s4=new String("abc");
        System.out.println(s3==s4);
        System.out.println(s3.equals(s4));
        System.out.println(s3.equalsIgnoreCase(s4));//忽略大小写比较
        System.out.println(s3.substring(0,s3.length()));//截取字符串,截取从0开始到length()-1位置的字符串
        System.out.println(s3.substring(0));//截取从0开始到结尾的字符串

        String s5="您好，可以加一个QQ吗？";
        System.out.println(s5.replace("QQ","**"));//替换字符串,会生成一个新的字符串，不会改变原字符串
        System.out.println(s5.contains("QQ"));//判断字符串是否包含某个子串

        String info="张三，李四，王五，赵六，钱七，孙八，周九";
        String[] names=info.split("，");//根据指定的分隔符将字符串拆分为字符串数组
        for(int i=0;i<names.length;i++)
        {
            System.out.println(names[i]);
        }

        //String的注意事项：只要是以""双引号写出来的字符串对象，会在堆内存中的字符串常量池中存储，相同的字符串只会存储一份
        //String是不可变的字符序列，对字符串的操作实际上是生成了一个新的字符串对象，原字符串对象不会改变
        //但是通过new关键字创建的字符串对象会存储在堆内存中，每次new都会创建一个新的对象

        String str="a"+"b"+"c";//在编译阶段会优化为String str="abc";存在字符串常量池中
    }

    public static String CreateRandomString(int size)
    {
        String ret="";
        String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random=new Random();
        for(int i=1;i<=size;i++)
        {
            ret+=str.charAt(random.nextInt(2025)%str.length());
        }
        return ret;
    }
    public static void main(String[] args) {
        //testString();
        for(int i=4;i<=10;i++)
        {
            System.out.println(CreateRandomString(i));
        }
    }
}
